#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# Copyright (c) 2008, umat
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without 
# modification, are permitted provided that the following conditions are met:
#
# - Redistributions of source code must retain the above copyright notice, this 
# list of conditions and the following disclaimer.
# - Redistributions in binary form must reproduce the above copyright notice, 
# this list of conditions and the following disclaimer in the documentation 
# and/or other materials provided with the distribution.
# - The names of the contributors may not be used to endorse or promote products 
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

import urllib, re, sys
from sgmllib import SGMLParser
from string import *
import htmlentitydefs, re
import wikipedia

from lybo import *

class MagistrixUploader(LyricWikiUploader):
	def get_song_list(self, artist):
		class SongLister(SGMLParser):
			def reset(self):                              
				SGMLParser.reset(self)
				self.urls = []

			def start_a(self, attrs):                     
				href = [v for k, v in attrs if k=='href']  
				cls = [v for k, v in attrs if k=='class']  
				if href and "lyricIcon bgMove" in cls and href[0].find("Uebersetzung") == -1:
					self.urls.append("http://www.magistrix.de"+href[0])

		f = urllib.urlopen("http://www.magistrix.de/lyrics/"+urllib.quote(artist))
		parser = SongLister()
		parser.feed(f.read())
		parser.close() 
		f.close()
		return parser.urls


	def get_song(self, url):
		f = urllib.urlopen(url)
		s = f.read()
		f.close()

		m = re.search("(?si)<h1 class='mainTitle'>\s*<b>\s*<i>(.*?) - (.*?)</i>", s)
		artist = self.format_artist(unicode(m.group(1),"utf-8"))
		song = self.format_song(unicode(m.group(2),"utf-8"))

		## Try some variants
		m = re.search("(?si)<div id=\'new_video\'>.*?</div>\s*</div>\s*</div>.*?<p>(.*)</p>.*?<table class='box1'.*>", s)
		if not m:
			m = re.search("(?si)<div id=\'new_video2\'>.*?</div>\s*</div>\s*</div>.*?<p>(.*)</p>.*?<table class='box1'.*>", s)
		if not m:
			m = re.search("(?si)<ul id=\'videos\'>.*?</ul>\s*</div>.*?<p>(.*)</p>.*?<table class='box1'.*>", s)
		if not m:
			m = re.search("(?si)<p class='notice'>.*?</div>.*?<p>(.*)</p>.*?<table class='box1'.*>", s)

		lyrics = unicode(m.group(1),"utf-8")
		lyrics = re.sub(r"(?si)<b>(.*?)\n.*?<br\s*/?></b>", "'''\\1'''", lyrics)
		lyrics = self.clean_lyrics(lyrics)
		
		return artist, song, lyrics

if __name__ == "__main__":
	retval = 0
	ul = MagistrixUploader()
	ul.parse_arguments_and_upload()
